package com.wanxi.dangdang.controller.back.scenic;

import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.wanxi.dangdang.common.CommonResult;
import com.wanxi.dangdang.model.pojo.Scenic;
import com.wanxi.dangdang.model.vo.AddScenicVO;
import com.wanxi.dangdang.model.vo.FindPageScenicVO;
import com.wanxi.dangdang.model.vo.HighSalesCityVO;
import com.wanxi.dangdang.model.vo.SumScenicVO;
import com.wanxi.dangdang.service.ScenicService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @Author: YanZhengYi
 * @Description: 景区后台Controller
 * @Date: Created in 2021/8/30
 * @Version: 1.0
 */
@RestController
@RequestMapping("/back/a/science")
@Api(tags = "后台景区管理(需要管理员登录)")
@Slf4j
public class ScenicBackController {

    @Autowired
    private ScenicService scenicService;

    /**
     * @return 一个json对象，数据为PageInfo类，消息为成功，通过data获取数据
     * @Author:YanZhengYi
     * @Description:该方法用于模糊查询以及分页以及查询所有景点
     * @Params:scenicVO是模糊查询所需要的参数 page是从第几页开始，limit是一页有多少
     * @Date: 14:50 2021/8/30
     */
    @ApiOperation("该方法用于模糊查询以及分页以及查询所有景点")
    @GetMapping("/findPage")
    public CommonResult<PageInfo<Scenic>> backFindPage(FindPageScenicVO findPageScenicVO) {
        PageInfo<Scenic> pageInfo = scenicService.backFindPage(findPageScenicVO);
        log.info(JSONObject.toJSONString("查找所有景区信息凭证"+findPageScenicVO));
        return CommonResult.successData(pageInfo);
    }

    /**
     * @Author:YanZhengYi
     * @Description: 此方法用于修改景区的上下架状态(需要管理员登录)
     * @Params:id是景区id
     * @Date: 14:59 2021/8/30
     */
    @ApiOperation("管理员修改景区的上下架状态")
    @GetMapping("/updateStatus")
//    @ApiImplicitParam(name = "scenicId", value = "单个景区id", dataType = "Long")
    public CommonResult backUpdateStatus(Long scenicId) {
        if (scenicId == null){
            log.info("未获取到景区Id");
            return CommonResult.failed("未获取到景区Id");
        }
        log.info(JSONObject.toJSONString("修改上下架状态的景区Id为"+scenicId));
        scenicService.backUpdateStatus(scenicId);
        return CommonResult.successData("成功");
    }

    /**
     * @Author:YanZhengYi
     * @Description: 单个删除（需要管理员登录）
     * @Params: id是景区id
     * @Date: 15:01 2021/8/30
     */
    @ApiOperation("管理员对景区的单个删除")
//    @ApiImplicitParam(name = "scenicId", value = "单个景区id", dataType = "Long")
    @GetMapping("/delete")
    public CommonResult delete(Long scenicId) {
        if (scenicId == null){
            log.info("未获取到景区Id");
            return CommonResult.failed("未获取到景区Id");
        }
        log.info(JSONObject.toJSONString("删除景区的Id为"+scenicId));
        scenicService.delete(scenicId);
        return CommonResult.successData("成功");
    }

    /**
     * @Author:YanZhengYi
     * @Description: 通过id找到景区, 进行回显数据时会用(需要管理员登录)
     * @Params: id是景区id
     * @Date: 15:02 2021/8/30
     */
    @ApiOperation("通过id找到景区")
    @GetMapping("/findById")
//    @ApiImplicitParam(name = "scenicId",value = "单个景区id",dataType = "Long")
    public CommonResult<AddScenicVO> backFindById(Long scenicId) {
        if (scenicId == null){
            log.info("未获取到景区Id");
            return CommonResult.failed("未获取到景区Id");
        }
        log.info(JSONObject.toJSONString("景区id为"+scenicId));
        AddScenicVO addScenicVO = scenicService.backFindById(scenicId);
        return CommonResult.successData(addScenicVO);
    }

//需要管理员登录
    @ApiOperation("更新景区")
    @PostMapping("/update")
//    @ApiImplicitParam(name = "addScenicVO",value = "更新页面输入的对象")
    public CommonResult update(@RequestBody AddScenicVO addScenicVO, Long id) {
        if (id ==null){
            log.info("未获取到景区Id");
            return CommonResult.failed("未获取到景区Id");
        }
        if (addScenicVO==null){
            log.info("更新信息不完善");
            return CommonResult.failed("请修改信息后再确认");
        }
        log.info(JSONObject.toJSONString("景区id为"+id+"更新的数据有"+addScenicVO));
        scenicService.backUpdate(addScenicVO, id);
        return CommonResult.successData("成功");
    }

    /**
     * @Author:YanZhengYi
     * @Description: 通过前端传过来的一个scenic实体类对象将其添加入数据库中(需要管理员登录)
     * @Params: Scenic  实体类对象
     * @Date: 15:05 2021/8/30
     */
    @ApiOperation("新增一个景区实体类对象")
    @PostMapping("/add")
//    @ApiImplicitParam(name = "scenic",value = "景区实体类对象")
    public CommonResult add(@RequestBody AddScenicVO addScenicVO) {
        if (addScenicVO==null){
            log.info("新增信息不完善");
            return CommonResult.failed("请完善信息");
        }
        log.info(JSONObject.toJSONString("景区信息为"+addScenicVO));
        scenicService.add(addScenicVO);
        return CommonResult.success();
    }

    /**
     * @Author:YanZhengYi
     * @Description: 通过景区表找到销量前五城市(管理员登录)
     * @Params:暂定
     * @Date: 15:08 2021/8/30
     */
    @ApiOperation("找到销量前五城市")
    @GetMapping("/findHighSalesCityBySales")
    public CommonResult<List<HighSalesCityVO>> findHighSalesCityBySales() {
        List<HighSalesCityVO> highSalesCityVOS = scenicService.findHighSalesCityBySales();
        return CommonResult.successData(highSalesCityVOS);
    }

    /**
     * @Author:YanZhengYi
     * @Description: 通过景区表查询最热城市中的景区数量(管理员登录)
     * @Params: 暂定
     * @Date: 15:10 2021/8/30
     */
    @ApiOperation("通过景区表查询销量前五城市中的景区数量")
    @GetMapping("/findHighSumScienceByCity")
    public CommonResult<List<SumScenicVO>> findHighSumScienceByCity() {
        List<SumScenicVO> sumScenicVOS = scenicService.findHighSumScienceByCity();
        return CommonResult.successData(sumScenicVOS);
    }
}
